/*
* 当我们使用 for of 去遍历一个对象的时候，就是去执行对象的iterator方法
* 在自定义对象中我们使用Symbol.iterator来定义我们的iterator方法,因为Symbol.iterator是函数表达式需要用[]框起来
* */
{
    //自定义对象
    let selfObj = {
        name: 'hc',
        love: [
            {
                name: 'gakki',
                age: 30
            },
            {
                name: 'yangmi',
                age: 32
            }],
        [Symbol.iterator]() {
            let index=0;
            let length=this.love.length;
            let value;
            let self=this;//这里的this对象还是selfObject,但是后面使用next()方法的就不是selfObject了，是下面return的iterator对象，所以先存起来下面以备使用
            return{//返回iterator对象
                next(){//定义它的next方法
                    if (index<length){
                        value=self.name+' love '+self.love[index].name;
                        index++;
                        return{//next方法要返回两个值
                            value: value,//value:就是let item of selfObject中的 item接收到的值
                            done: false//false表示还要继续执行next方法
                        }
                    }else {
                        return{
                            value: 'over',
                            done: true
                        }
                    }
                }
            }
        }
    };
    //使用 for of遍历
    for (let item of selfObj){
        console.log(item);
    }
//    使用next遍历
    let iterator=selfObj[Symbol.iterator]();//因为Symbol.iterator是函数表达式需要[]来解析为方法名，后面加()调用这个方法，注意不用加.了
    console.log(iterator);
    console.log(iterator.next());
    console.log(selfObj.name);
}